using System;
using Cysharp.Threading.Tasks;

namespace EventBus
{
    public interface IRemoveAsyncFuncEventListener
    {
        void RemoveListen<TResult>(string eventName, Func<UniTask<TResult>> callback);
        void RemoveListen<T1, TResult>(string eventName, Func<T1, UniTask<TResult>> callback);
        void RemoveListen<T1, T2, TResult>(string eventName,  Func<T1, T2, UniTask<TResult>> callback);
        void RemoveListen<T1, T2, T3, TResult>(string eventName,  Func<T1, T2, T3, UniTask<TResult>> callback);
        void RemoveListen<T1, T2, T3, T4, TResult>(string eventName,  Func<T1, T2, T3, T4, UniTask<TResult>> callback);
        void RemoveListen<T1, T2, T3, T4, T5, TResult>(string eventName,  Func<T1, T2, T3, T4, T5, UniTask<TResult>> callback);
        void RemoveListen<T1, T2, T3, T4, T5, T6, TResult>(string eventName,  Func<T1, T2, T3, T4, T5, T6, UniTask<TResult>> callback);
        void RemoveListen<T1, T2, T3, T4, T5, T6, T7, TResult>(string eventName,  Func<T1, T2, T3, T4, T5, T6, T7, UniTask<TResult>> callback);
        void RemoveListen<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(string eventName,  Func<T1, T2, T3, T4, T5, T6, T7, T8, UniTask<TResult>> callback);
    }
}